// util.callbackify(original) 将 async 异步函数（或者一个返回值为 Promise 的函数）转换成遵循异常优先的回调风格的函数

// 程序1
const util = require('util');

// async 异步函数
async function fn() {
	// 制造异常
	var x = 5 / 0;
	console.log(x); // Infinity 不是异常，而是无限
	
	return new Date();
}

const callbackFunc = util.callbackify(fn);

console.log(callbackFunc); // [Function: fnCallbackified]

callbackFunc((err, ret) => {
	if (err) throw err;
	
	console.log(ret);
});
console.log('END.23');

// 程序2
function fn2() {
	return Promise.reject(null);
}

const callbackFunc2 = util.callbackify(fn2);

console.log(callbackFunc2);

callbackFunc2((err, ret) => {
	console.log('call in...');
	console.log(err); // Promise was rejected with falsy value
	console.log(ret); // undefined
	
	var cond = err && err.hasOwnProperty('reason') && err.reason === null; // true
	console.log(cond);
});
console.log('END.43');
